export function checkPassword(length, value) {
	// 0： 表示第一个级别 1：表示第二个级别 2：表示第三个级别
	// 3： 表示第四个级别 4：表示第五个级别
	var modes = 0;
	if (value.length < length) { //最初级别
		return modes;
	}
	if (/\d/.test(value)) { //如果用户输入的密码 包含了数字
		modes++;
	}
	if (/[a-z]/.test(value)) { //如果用户输入的密码 包含了小写的a到z
		modes++;
	}
	if (/[A-Z]/.test(value)) { //如果用户输入的密码 包含了大写的A到Z
		modes++;
	}
	if (/\W/.test(value)) { //如果是非数字 字母 下划线
		modes++;
	}
	switch (modes) {
		case 1:
			return 1;
			break;
		case 2:
			return 2;
			break;
		case 3:
			return 3;
			break;
		case 4:
			return 4;
			break;
	}
}

/**
 * 判断是否为空
 * @param str
 * @returns {boolean}
 */
export function isEmpty(str) {
	if (!str ||  str == null  || str == "null" || str == "undefined" || typeof (str) == "undefined" || str.length == 0 ||str==="")
		return true;
	return false;
}

/**
 ** 乘法函数，用来得到精确的乘法结果
 ** 说明：javascript的乘法结果会有误差，在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
 ** 调用：accMul(arg1,arg2)
 ** 返回值：arg1乘以 arg2的精确结果
 **/
export function accMul(arg1, arg2) {
	var m = 0,
		s1 = arg1.toString(),
		s2 = arg2.toString();
	try {
		m += s1.split(".")[1].length;
	} catch (e) {}
	try {
		m += s2.split(".")[1].length;
	} catch (e) {}
	return ((Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) /Math.pow(10, m));
}


/**
 ** 加法函数，用来得到精确的加法结果
 ** 说明：javascript的加法结果会有误差，在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
 ** 调用：accAdd(arg1,arg2)
 ** 返回值：arg1加上arg2的精确结果
 **/
export function accAdd(arg1, arg2) {
	var r1, r2, m, c;
	try {
		r1 = arg1.toString().split(".")[1].length;
	} catch (e) {
		r1 = 0;
	}
	try {
		r2 = arg2.toString().split(".")[1].length;
	} catch (e) {
		r2 = 0;
	}
	c = Math.abs(r1 - r2);
	m = Math.pow(10, Math.max(r1, r2));
	if (c > 0) {
		var cm = Math.pow(10, c);
		if (r1 > r2) {
			arg1 = Number(arg1.toString().replace(".", ""));
			arg2 = Number(arg2.toString().replace(".", "")) * cm;
		} else {
			arg1 = Number(arg1.toString().replace(".", "")) * cm;
			arg2 = Number(arg2.toString().replace(".", ""));
		}
	} else {
		arg1 = Number(arg1.toString().replace(".", ""));
		arg2 = Number(arg2.toString().replace(".", ""));
	}
	return (arg1 + arg2) / m;
}


/**
 ** 减法函数，用来得到精确的减法结果
 ** 说明：javascript的减法结果会有误差，在两个浮点数相减的时候会比较明显。这个函数返回较为精确的减法结果。
 ** 调用：accSub(arg1,arg2)
 ** 返回值：arg1加上arg2的精确结果
 **/
export function accSub(arg1, arg2) {
	var r1, r2, m, n;
	try {
		r1 = arg1.toString().split(".")[1].length;
	} catch (e) {
		r1 = 0;
	}
	try {
		r2 = arg2.toString().split(".")[1].length;
	} catch (e) {
		r2 = 0;
	}
	m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
	n = r1 >= r2 ? r1 : r2;
	return ((arg1 * m - arg2 * m) / m).toFixed(n);
}


export function filterTwoBitMoney(val) {
	if(isNaN(val)) {
		val = "0";
	}

	var scale = 2;
	val = (Math.round(val * Math.pow(10, scale)) / Math.pow(10, scale)).toFixed(scale); //四舍五入保留2位小数
	return val;
}

export function filterMoney(val) {
	if(isNaN(val)) {
		val = "0";
	}

	var scale = 4;
	val = (Math.round(val * Math.pow(10, scale)) / Math.pow(10, scale)).toFixed(scale); //四舍五入保留4位小数
	val = String(val);
	let dot = val.indexOf(".");
	let decimal = val.substr(dot);
	let lastTowDecimal = decimal.substring(3,5);//后两位小数位值
	let lastDecimal = decimal.substring(4,5);//末尾小数位值
	if(lastTowDecimal=="00"){//保留两位小数
		decimal = decimal.substring(0,3);
	}else if(lastDecimal=="0"){//保留三位小数
		decimal = decimal.substring(0,4);
	}
	val = val.substring(0, dot);


	if(val.length > 3){
		let newArr = [];
		for(let i = 0; i < val.length; i++){
			if((val.length - i) >= 3 && (val.length - i) % 3 == 0 && newArr.length > 0) {
				newArr.push(",");
			}
			newArr.push(val[i]);
		}
		val = newArr.join("");
	}

	// 负数情况
	if (val.indexOf('-,') !== -1) {
		val = val.replace('-,', '-');
	}
	return val + decimal;
}
// goBack.js
export function goBack() {
	const canNavBack = getCurrentPages()
	if (canNavBack && canNavBack.length > 1) {
	  uni.navigateBack({
		delta: 1
	  })
	} else {
	  history.back()
	}
  }


/**
 * 处理浮点数运算
 * 在原型写方法
 * 先将浮点数转为整数运算
 */
Number.prototype.addFloat = function(num2) {
	const num1 = this;
	return handleFloat.add(num1, num2)
}
Number.prototype.subtractFloat = function(num2) {
	const num1 = this;
	return handleFloat.subtract(num1, num2)
}
Number.prototype.multipleFloat = function(num2) {
	const num1 = this;
	return handleFloat.multiple(num1, num2)
}
Number.prototype.divideFloat = function(num2) {
	const num1 = this;
	return handleFloat.divide(num1, num2)
}
var handleFloat = {
	/**
	 * 加法
	 * @param {*} num1 
	 * @param {*} num2 
	 */
	add: function(num1, num2) {
		const pow = handleFloat._getPointPow(num1, num2);
		return (num1 * pow + num2 * pow) / pow
	},
	/**
	 * 减法
	 * @param {*} num1 
	 * @param {*} num2 
	 */
	subtract: function(num1, num2) {
		const pow = handleFloat._getPointPow(num1, num2);
		return (num1 * pow - num2 * pow) / pow
	},
	/**
	 * 乘法
	 * @param {*} num1 
	 * @param {*} num2 
	 */
	multiple: function(num1, num2) {
		const pow = handleFloat._getPointPow(num1, num2) || 1;
		console.log("pow " + pow);
		return ((num1 * pow) * (num2 * pow)) / (pow * pow)
	},
	/**
	 * 除法
	 * @param {*} num1 
	 * @param {*} num2 
	 */
	divide: function(num1, num2) {
		const pow = handleFloat._getPointPow(num1, num2);
		return ((num1 * pow) / (num2 * pow))
	},
	/**
	 * 获取两个数小数点的长度最大值，然后取10的次幂
	 * @param {*} num1 
	 * @param {*} num2 
	 */
	_getPointPow: function(num1, num2) {
		if (typeof num2 !== 'number') {
			throw new TypeError('数字不合法');
		}
		let pointLength1 = 0,
			pointLength2 = 0;
		//如果存在小数点
		if ((num1 + '').indexOf('.') !== -1) {
			pointLength1 = (num1 + '').split('.')[1].length;
		}
		if ((num2 + '').indexOf('.') !== -1) {
			pointLength2 = (num2 + '').split('.')[1].length;
		}
		// console.log(Math.max(pointLength1, pointLength2));
		// console.log(Math.pow(10, Math.max(pointLength1, pointLength2)));
		return Math.pow(10, Math.max(pointLength1, pointLength2));
	}
}